﻿#define _CRT_SECURE_NO_WARNINGS
/*输入的第一行包含两个整数 n,m。

第 2 行到第 n+1 行每行包含 
�
m 个整数，相邻整数之间用一个空格分隔。如果对应的整数为 
0，表示这一格没有地雷。如果对应的整数为 
1，表示这一格有地雷。

其中，1≤n,m≤100 分钟后还是在当天。

输出描述
输出 n 行，每行 m 个整数，相邻整数之间用空格分隔。

对于没有地雷的方格，输出这格周围的地雷数量。对于有地雷的方格，输出 9。*/
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char* argv[])
{
    // 请在此输入您的代码
    int n, m, i, j, count;
    scanf("%d %d", &n, &m);
    int arr[n + 2][m + 2];//第一行和第n+1行全为0，第一列和第m+1列全为0；
    int ans[n + 2][m + 2];
    for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++)
            scanf("%d", &arr[i][j]);
    for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++) {
            if (arr[i][j] == 1) ans[i][j] = 9;
            else {
                count = 0;
                if (arr[i + 1][j] == 1)count++;//上
                if (arr[i - 1][j] == 1)count++;//下
                if (arr[i][j - 1] == 1)count++;//左
                if (arr[i][j + 1] == 1)count++;//右
                if (arr[i + 1][j - 1] == 1)count++;//左上
                if (arr[i - 1][j - 1] == 1)count++;//左下
                if (arr[i + 1][j + 1] == 1)count++;//右上
                if (arr[i - 1][j + 1] == 1)count++;//右下
                ans[i][j] = count;
            }
        }
    for (i = 1; i <= n; i++) {
        for (j = 1; j <= m; j++)
            printf("%d ", ans[i][j]);
        printf("\n");
    }
    return 0;
}